
package negocio;

import java.util.ArrayList;
import java.util.Iterator;

/**
 *
 * @author Emiliano
 * Una EntidadXML esta representa por una etiqueta del XML junto con todo su contenido
 * 
 */
public class EntidadXML {
    public String nombre;
    private EntidadXML entidadPadre;
    public ArrayList<EntidadXML> hijos = new ArrayList<EntidadXML>();
    public ArrayList<AtributoXML> atributos = new ArrayList<AtributoXML>();
    private String contenido;
    private boolean esRaiz;
    private EtiquetaXML etiqueta;

    public ArrayList<AtributoXML> getAtributos() {
        return atributos;
    }

    public String getContenido() {
        return contenido;
    }

    public EntidadXML getEntidadPadre() {
        return entidadPadre;
    }

    public boolean isEsRaiz() {
        return esRaiz;
    }

    public EtiquetaXML getEtiqueta() {
        return etiqueta;
    }

    public ArrayList<EntidadXML> getHijos() {
        return hijos;
    }

    public String getNombre() {
        return nombre;
    }

    public void setAtributos(ArrayList<AtributoXML> atributos) {
        this.atributos = atributos;
    }

    public void setContenido(String contenido) {
        this.contenido = contenido;
    }

    public void setEntidadPadre(EntidadXML entidadPadre) {
        this.entidadPadre = entidadPadre;
    }

    public void setEsRaiz(boolean esRaiz) {
        this.esRaiz = esRaiz;
    }

    public void setEtiqueta(EtiquetaXML etiqueta) {
        this.etiqueta = etiqueta;
    }

    public void setHijos(ArrayList<EntidadXML> hijos) {
        this.hijos = hijos;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }
    
    /**
     * Este metodo devuelve un objeto de tipo String con todos los atributos de la entidad
     */
  public String getTodosLosAtributos()
  {
      StringBuffer sb = new StringBuffer("");
      
      if(atributos != null)
      {
          for(Iterator<AtributoXML> it = atributos.iterator(); it.hasNext();)
          {
              AtributoXML atributo = it.next();
              if(atributo != null)
              {
                  sb.append(atributo.getAtributoCompleto());
                  sb.append(" ");
              }
          }
      }
      return sb.toString();
  }
    
 
/**
     * Este metodo devuelve un objeto de tipo String con la principal informacion
     * que representa a la entidad en formato tabulado
     * @param tab - tabulacion inicial
     * @return String - la informacion principal que representa la entidad
     */
  
  public String devolverStringAnidado(String tab)
  {     
      String aux = "";
        aux+=tab+"Nombre:\t"+getNombre()+"\n"+tab+"Contenido:\t"+getContenido();
        aux+="\n"+tab+"Atributos: \t";
        
        for(int i=0 ; i<atributos.size() ; i++) {
            AtributoXML atributo = atributos.get(i);
            if (atributo != null) {
                aux+=""+atributo.getNombre()+" '"+atributo.getValor()+"'\t";
            }
    	}
        aux+="\n"+tab+"Entidades Hijas:\n";
    	for(int i=0 ; i<hijos.size() ; i++) {
    		EntidadXML hijo = hijos.get(i);
    		if (hijo != null) {
    			aux+=hijo.devolverStringAnidado(tab+"\t");
    		}
    	}
    
    	return aux;
  }
  
  public String toString() {
        StringBuffer sb = new StringBuffer();
        
        sb.append("\n");
        sb.append("nombre: ");
        sb.append(nombre);

        sb.append("\n");
        sb.append("contenido: ");
        sb.append(contenido);

        sb.append("\n");
        sb.append("esRaiz: ");
        sb.append(esRaiz);

        sb.append("\n");
        sb.append("hijos: ");
        if (hijos.isEmpty()) {
            sb.append("null");
        }
        else {
            for (int i=0 ; i<hijos.size() ; i++) {
                EntidadXML entidad = hijos.get(i);
                sb.append(entidad.toString());
            }
        }
        
        return sb.toString();
    }
  
}
